boolean operator precedence explanation